



# 介于应用  和  服务器之间， 通过策略协调管理多个应用服务
# 通过yml 文件订阅应用的部署顺序信息， 自动部署应用到各个服务器上
# 可以自动扩缩容，宕机可以在其他服务器上自动部署应用


# 将服务分成 2 部分， 控制平面 和 工作节点（node）

# 控制平面负责管理 node 
#     通过 api server 组件对外暴露各个接口， 通过这些接口可以操控各个node

#         scheduler  查看哪些服务器资源充足，可以部署应用
#         controller manager 管理用用关闭
#         期间的操作日志会保存在存储层，ETCD

# node 负责运行各个服务
    
#     可以时裸机服务器，或虚拟机
#     只需要将代码打包成 container image（容器镜像）

#     通过  container run time 组件负责容器的下载

#     每个 应用服务 可以  看成一个container 
#                 每个应用 还有  日志搜集器 和 监控采集器 这两个容器

#     app 容器  加上  日志 和 监控  组成一个  pod， 运行在 node 上


# k8s 可以 以pod 为单位来调度  它们到不同的node   还可以重启 或 动态阔缩容
# pod 也时 k8s 中最小的调度单位


# kubelet  负责管理和监控 pod   控制平面 就是通过这个组件对 pod 管理监控的

# kube proxy 负责 node 的网络通信功能， 通过它  外部请求可以转发到 pod 中


# 控制平面 和 node 共同构成了一个集群
# 每个  集群 会部署一个  ingress 控制器， 它可以提供一个入口，让外部服务访问集群内部服务


# kubectl  一个命令行工具，通过执行命令调用 k8s API


# ----------------------------------------------------------

# 编写  yaml 文件 ：  定义 pod 用到了哪些镜像，占用多少内存 CPU 等信息
# 使用  kubectl 命令行工具 执行： kubectl  apply -f xxx.yaml
# kubectl 读取 和 解析  yaml 文件， 将解析的对象  通过API请求发给 k8s 的控制平面的 api server
# api server 根据要求驱使 scheduler 通过 etcd 提供的数据 寻找合适的node
# 让  controller manager 控制node 创建服务
# node 内部的 kubelet 收到命令后， 开始基于 conatiner runtime 的组件，拉去镜像，创建容器，最终完成pod 的创建




# 外部请求 到大  k8s 的 ingress控制器， 然后请求转发到 k8s内部的 某个 node 的 kube proxy 上
# 然后找到 pod  ，再转发到容器内部的服务中， 处理的结果园路返回，到此完成了以此服务调用